package 
{
	import adobe.utils.CustomActions;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import Objetos.Bola;
	import Objetos.Jogador;
	import Objetos.Obstaculos;
	
	/**
	 * ...
	 * @author Sandro Gomes
	 */
	public class Main extends MovieClip
	{
		public var MC_tela				:MovieClip;
		public var MC_fase				:MovieClip;
		public var MC_gol1				:MovieClip;
		public var MC_gol2				:MovieClip;
		public var MC_heroi				:Heroi;
		public var MC_bola				:Bola;
		//public var MC_jogador			:Jogador;
		
		public var UI_placar1			:int;
		public var UI_placar2			:int;
		
		public var TX_placar			:TextField;
		public var TF_placar			:TextFormat;
		
		public var BO_ehGol				:Boolean;
		
		public var AR_obstaculo			:Array;
		
		private static var _instance	:Main;
		
		public static function getInstance():Main
		{
			return _instance;
		}
		
		public function Main()
		{
			_instance = this;
			comecarJogo();
		}
		
		public function comecarJogo():void
		{
			MC_tela = new MovieClip();
			//MC_heroi = new Heroi();
			//MC_jogador = new Jogador();
			MC_bola = new Bola();
			MC_fase = new Fase1();
			MC_gol1 = new Gol1();
			MC_gol2 = new Gol2();
			AR_obstaculo = new Array();
			UI_placar1 = 0;
			UI_placar2 = 0;
			TX_placar = new TextField();
			TF_placar = new TextFormat();
			
			TF_placar.size = 100;
			TF_placar.color = 0x003333;
			
			
			stage.addChild(MC_tela);
			MC_tela.addChild(MC_fase);
			MC_tela.addChild(TX_placar);
			//MC_tela.addChild(MC_gol1);
			//MC_tela.addChild(MC_gol2);
			//MC_heroi.x = 900;
			//MC_heroi.y = 500;
			
			//MC_jogador.x = 100;
			//MC_jogador.y = 500;
			
			MC_bola.x = 980;
			MC_bola.y = 532;
			MC_bola.NB_velocidadeX = 0;
			MC_bola.NB_velocidadeY = 0;
			
			MC_gol1.x = 0;
			MC_gol1.y = 540;
			MC_gol2.x = 1951;
			MC_gol2.y = 540;
			
			BO_ehGol = false;
			
			TX_placar.defaultTextFormat = TF_placar;
			TX_placar.x = 900;
			TX_placar.y = 50;
			TX_placar.width = 300;
			TX_placar.alpha = 0.5;
			
			TX_placar.text = "0x0" + "v";
			
			
			
			//trace("começou");
			
			//MC_tela.addChild(MC_heroi);
			MC_tela.addChild(MC_bola);
			//MC_tela.addChild(MC_jogador);
			
			
			desenharArrayObstaculos();
			//MC_tela.addEventListener(Event.ENTER_FRAME, update);
			//stage.addEventListener(MouseEvent.CLICK, baterBola, false, 0, true);
			stage.addEventListener(Event.ENTER_FRAME, colisao_update, false, 0, true);
			stage.addEventListener(MouseEvent.MOUSE_UP, impulso, false, 0, true);
		}
		
		
		
		/*public function baterBola(e:MouseEvent):void
		{
			MC_bola.NB_velocidadeX *= -1.5;
		}*/
		
		public function colisao_update(e:Event):void
		{ 
			/*//Cálculo das disntâncias entre a bola e o jogador
			var NB_distX:Number = ( MC_bola.x - MC_jogador.x );
			var NB_distY:Number = ( MC_bola.y - MC_jogador.y );
			var NB_dist:Number = Math.sqrt ( NB_distX * NB_distX + NB_distY * NB_distY );
			
			//Checa a colisão
			if ( NB_dist < (MC_bola.width/2 + MC_jogador.width/2))
				{
					colisao ();
				}*/
				
			for (var i:int = 0; i < AR_obstaculo.length; i++ )

			{
				var NB_distX1:Number = ( MC_bola.x - AR_obstaculo[i].x );
				var NB_distY1:Number = ( MC_bola.y - AR_obstaculo[i].y );
				var NB_dist1:Number = Math.sqrt ( NB_distX1 * NB_distX1 + NB_distY1 * NB_distY1 );
				
				if ( NB_dist1 < (MC_bola.width / 2 + AR_obstaculo[i].width / 2))
				{
				colisao_obstaculo(i);
				}
			}
			detectGol();
			
			
			
			//Aproveita o update para atualizar a posição do jogador	
			//moverJogador();
		}
		
		private function detectGol():void
		{
			if (MC_bola.hitTestObject(MC_gol1) && !BO_ehGol)
			{
				UI_placar1++;
				//BO_ehGol = true;
				trace("P1 - " + UI_placar1 + "/ P2 - " + UI_placar2);
				MC_bola.x = 980;
				MC_bola.y = 532;
				MC_bola.NB_velocidadeX = 0;
				MC_bola.NB_velocidadeY = 0;
			}
		
			
			if (MC_bola.hitTestObject(MC_gol2) && !BO_ehGol)
			{
				UI_placar2++;
				//BO_ehGol = true;
				trace("P1 - " + UI_placar1 + "/ P2 - " + UI_placar2);
				MC_bola.x = 980;
				MC_bola.y = 532;
				MC_bola.NB_velocidadeX = 0;
				MC_bola.NB_velocidadeY = 0;
			}
			
				TX_placar.text = UI_placar1 + "x" + UI_placar2;
		}
		
		
		
		/*private function colisao () : void
		{
			var NB_x:Number = MC_bola.x;
			var NB_y:Number = MC_bola.y;
			var NB_distX:Number = MC_jogador.x - NB_x;
			var NB_distY:Number = MC_jogador.y - NB_y;
			
			//Cálculo da distância entre os centros das circunferências
			var NB_dist:Number = Math.sqrt ( NB_distX * NB_distX + NB_distY * NB_distY );
			
			//Cálculo do raio da Bola e do Jogador
			var NB_raioBola:Number = MC_bola.width/2;
			var NB_raioJogador:Number = MC_jogador.width/2;
			
			//Cálculo da Normal
			var NB_normalX:Number = NB_distX/NB_dist;
			var NB_normalY:Number = NB_distY/NB_dist;
 
			//Cálculo do Vetor
			var NB_vetor:Number = Math.abs( ( MC_bola.NB_velocidadeX ) * NB_normalX )+ Math.abs( ( MC_bola.NB_velocidadeY ) * NB_normalY );
			//var NB_vetor:Number = 50;
			var NB_velX:Number = NB_vetor * NB_normalX;
			var NB_velY:Number = NB_vetor * NB_normalY;
 
			
				MC_bola.NB_velocidadeX = NB_velX;
			
				MC_bola.NB_velocidadeY = NB_velY;
		}*/
 
		
		private function impulso (e:MouseEvent) : void
		{
			var NB_x:Number = MC_bola.x;
			var NB_y:Number = MC_bola.y;
			var NB_distX:Number = mouseX - NB_x;
			var NB_distY:Number = mouseY - NB_y;
			
			//Cálculo da distância entre os centros das circunferências
			var NB_dist:Number = Math.sqrt ( NB_distX * NB_distX + NB_distY * NB_distY );
			
			//Cálculo do raio da Bola e do Jogador
			/*var NB_raioBola:Number = MC_bola.width/2;
			var NB_raioJogador:Number = MC_jogador.width/2;
			*/
			
			//Cálculo da Normal
			var NB_normalX:Number = NB_distX/NB_dist;
			var NB_normalY:Number = NB_distY/NB_dist;
 
			//Cálculo do Vetor
			var NB_vetor:Number = ( ( NB_distX ) * NB_normalX ) + ( ( NB_distY ) * NB_normalY );
			if (NB_vetor > 100)
			NB_vetor = 100;
			
			//var NB_vetor:Number = 50;
			var NB_velX:Number = NB_vetor * NB_normalX;
			var NB_velY:Number = NB_vetor * NB_normalY;
 
			
				MC_bola.NB_velocidadeX = NB_velX;
			
				MC_bola.NB_velocidadeY = NB_velY;
		}
		
		private function colisao_obstaculo (i:int) : void
		{
			var NB_x:Number = MC_bola.x;
			var NB_y:Number = MC_bola.y;
			var NB_distX:Number = AR_obstaculo[i].x - NB_x;
			var NB_distY:Number = AR_obstaculo[i].y - NB_y;
			
			//Cálculo da distância entre os centros das circunferências
			var NB_dist:Number = Math.sqrt ( NB_distX * NB_distX + NB_distY * NB_distY );
			
			//Cálculo do raio da Bola e do Jogador
			var NB_raioBola:Number = MC_bola.width/2;
			var NB_raioObstaculo:Number = AR_obstaculo[i].width/2;
			
			//Cálculo da Normal
			var NB_normalX:Number = NB_distX/NB_dist;
			var NB_normalY:Number = NB_distY/NB_dist;
 
			//Cálculo do Vetor
			var NB_vetor:Number = Math.abs( ( MC_bola.NB_velocidadeX ) * NB_normalX )+ Math.abs( ( MC_bola.NB_velocidadeY ) * NB_normalY );
			//var NB_vetor:Number = 100;
			var NB_velX:Number = NB_vetor * NB_normalX;
			var NB_velY:Number = NB_vetor * NB_normalY;
 
			
				MC_bola.NB_velocidadeX = NB_velX;
			
				MC_bola.NB_velocidadeY = NB_velY;
				
				trace("colisao");
		}
		
		public function desenharArrayObstaculos():void
		{
			for (var m:uint = 0; m < MC_fase.numChildren; m++)
			{
				var mc:Object = MC_fase.getChildAt(m);
				
				if (mc is Obstaculos)
				{
					AR_obstaculo.push(mc);
				}
			}
			trace("Array " + AR_obstaculo.length);
			
		}
		
		/*private function moverJogador():void
		{
			MC_jogador.y = mouseY;
			MC_jogador.x = mouseX;
		}*/
	}
}